﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Proceso;
using Modelo;
namespace Interface
{
    /// <summary>
    /// Interaction logic for EditarProducto.xaml
    /// </summary>
    public partial class EditarProducto : UserControl
    {
        List<Producto> productos = null;
        int temp = 0;
        bool bandera = true;
        bool banderaDobleEvento = true;
        Proveedor proveedorAnterior;
        public EditarProducto()
        {
            InitializeComponent();
            try
            {
                productos = GestorProducto.obtenerTodaLaListaDeProductos();
                ponerProductosEnListBox();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Hubo un error: "+ex);
            }
            
        }
        private void ponerProductosEnListBox()
        {
            if (productos.Count > 0)
            {
                int temp = 0;
                listBoxProductos.Items.Clear();
                listBoxProductos.SelectedIndex = 0;
                foreach (Producto p in productos)
                {
                    listBoxProductos.Items.Add(p.nombreComercial + ", " + p.nombreQuimico + ", " + p.proveedor.nombre);
                }
                textBoxDetalle.Text = "";
                textBoxNombreCom.Text = "";
                textBoxNombreQuim.Text = "";
                textBoxPUC.Text = "";
                textBoxPUV.Text = "";
                labelProveedor.Content = "";
            }
            
        }
        private void serProvedores(Proveedor p1, Proveedor p2)
        {
            p1.contratoActivo = p2.contratoActivo;
            p1.fechaContrato = p2.fechaContrato;
            p1.idProveedor = p2.idProveedor;
            p1.nombre = p2.nombre;
        }
        private void buttonCambiarProveedor_Click(object sender, RoutedEventArgs e)
        {
            int index = listBoxProductos.SelectedIndex;
            if (index < 0)
                MessageBox.Show("Debe seleccionar un producto para cambiarlo");
            else
            {
                proveedorAnterior = new Proveedor();
                serProvedores(proveedorAnterior,productos[index].proveedor);
                SeleccionarDeUnaListaDeProveedores select = new SeleccionarDeUnaListaDeProveedores(productos[index]);
                select.ShowDialog();
                labelProveedor.Content = productos[index].proveedor.nombre;
            }
        }

        private void buttonGuardar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int index = listBoxProductos.SelectedIndex;
                GestorProducto.actualizarProducto(productos[index].idProducto, textBoxNombreQuim.Text, productos[index].proveedor.idProveedor, textBoxNombreCom.Text, textBoxPUC.Text, textBoxDetalle.Text, textBoxPUV.Text);
                MessageBox.Show("El producto ha sido guardado con éxito");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Hubo un error: "+ex);
            }
        }

        private void buttonBuscar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                productos = GestorProducto.buscarProductoPor(TextBoxNombreComercialBusqueda.Text);
                ponerProductosEnListBox();
            }
            catch (Exception ex)
            {

                MessageBox.Show("Hubo un error: " + ex.Message);
            }
        }
        

        private void listBoxProductos_IsMouseCapturedChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if (banderaDobleEvento)
            {
                banderaDobleEvento = false;
                temp = listBoxProductos.SelectedIndex;

                MessageBoxResult msg = MessageBox.Show("¿Está seguro de perder todos los cambios?", "Advertencia", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
                if (msg == MessageBoxResult.No)
                    bandera = false;
                else
                {
                    if(proveedorAnterior!=null)
                        productos[temp].proveedor = proveedorAnterior;
                    bandera = true;
                }
                    
            }
            else
                banderaDobleEvento = true;
        }

        private void listBoxProductos_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            if (bandera)
            {
                int index = listBoxProductos.SelectedIndex;
                temp = listBoxProductos.SelectedIndex;
                if (index >= 0)
                {
                    textBoxDetalle.Text = productos[index].Detalle;
                    textBoxNombreCom.Text = productos[index].nombreComercial;
                    textBoxNombreQuim.Text = productos[index].nombreQuimico;
                    textBoxPUC.Text = productos[index].precioUnitarioCompra.ToString();
                    textBoxPUV.Text = productos[index].precioUnitarioVenta.ToString();
                    labelProveedor.Content = productos[index].proveedor.nombre;
                }
                bandera = true;
            }
            else
                listBoxProductos.SelectedIndex = temp;
                
            
        }

        private void listBoxProductos_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            
        }
        

    }
}
